#!/usr/bin/enr/python3
# -*- coding: utf-8 -*-
# -------------------------------
# @Author : hurong
# @File : 07_class_homework.py
# @Time : 2023/7/5 20:14
# -------------------------------

"""
题目：
编写学员实体类 Student，对应成员变量包含：学号 id、姓名 name、性别 sex；
编写学员管理类 StudentManagement ，实现添加学员方法 addStudent()。
编写StudentManagement的main方法进行学员信息的添加：
学号：1001,姓名：张三,性别：男。
学号：1002,姓名：莉丝,性别：女。
学号：1003,姓名：王武,性别：男。
"""
# 编写实体类Student 定义成员变量：学号id 姓名name 性别sex
from typing import List


class Student:
    """
    构造方法，初始化学员属性
    :param id:
    :param name:
    :param sex:
    """
    def __init__(self, id:int, name:str, sex:str):
        self.student_id = id
        self.student_name = name
        self.student_sex  = sex
        # 定义魔法方法，相当于定义输出的格式，直接打印该类对象的话，就会按照下方格式输出
        def __repr__(self):
            return f"学号: {self.student_id}, 姓名:{self.student_name}, 性别:{self.student_sex}"

#       学员管理类
class StudentManagement:
    def __init__(self,stu_list: List[Student]):
        """
                初始化学员列表，声明传入的类型是List，列表里面是Student类的对象
                :param stu_list:
        """
        if stu_list:
            self.student_list = stu_list
        else:
            self.student_list = []

    def _get_student_by_id(self, stu_id: int):
        """
        get 方法，通过学员id获取学员信息
        :param stu_id:
        :return:
        """
        for stu in self.student_list:
            # 判断传入的id是否等于学员id，如果等于，说明查找成功
            if stu.student_id == stu_id:
                # 如果查询到了学员信息，直接返回，不再进行查找
                return stu


    # get方法，获取学员信息
    def getStudent(self, stu_id: int):
        result = self._get_student_by_id(stu_id)
        if result is not None:
            # 打印日志
            print(f"学员信息获取成功，该学员的信息为：\n{result}")
        else:
            # 未查询到，返回日志信息
            return print("查询失败，学员不存在！")


    def addStudents(self, stu_list: List[Student]):
        """
        一次添加多个学生
        :param stu_list: Student对象的列表
        :return:
        """
        # 定义临时的遍历，存储本次添加的所有学员信息
        add_list = []
        for s in stu_list:
            # 遍历已经存在的学员列表
            result = self._get_student_by_id(s.student_id)
            if result:
                print(f"学员{s.student_id}已存在，请核对学生信息")
            else:
                self.student_list.append(s)
                add_list.append(s)
                # 如果列表没有值，即没有添加学员信息，则不打印
            if add_list:
                print("添加成功，添加的学员信息为：")
                for i in add_list:
                    print(i)


    def addStudent(self, stu: Student):
        """
        add方法，一次添加一个学员信息
        :param stu: Student对象
        :return:
        """
        # 遍历已经存在的学员列表
        result = self._get_student_by_id(stu.student_id)
        if result:
            print(f"学员{stu.student_id}已存在，请核对学生信息")
        else:
            self.student_list.append(stu)
            print(f"添加成功，添加的学员信息为：{stu}")


if __name__ == '__main__':
    s1 = Student(1001, "张三", "男")
    s2 = Student(1002, "莉丝", "男")
    s3 = Student(1003, "王武", "男")
    # 实例化学员管理类
    student_list = StudentManagement([])
    # 添加学员信息，传入学员对象列表
    student_list.addStudents([s1, s2, s3])
